package com.yuandian.api.management.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yuandian.api.management.validate.DeleteFlag;
import com.yuandian.api.management.validate.InsertFlag;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import javax.validation.groups.Default;
import java.time.LocalDateTime;

/**
 * 网端配置表-实体
 * @author zfsn
 * @date 2023-3-16
 */
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "网端配置表", description = "网端配置表")
@TableName("conf_segment")
public class ConfSegment extends Model<ConfSegment> {

	/**
	 * 主键，唯一标识数据
	 */
	@Null(message = "主键id一定为null", groups = InsertFlag.class)
	@NotNull(message = "网端id不能为空", groups = DeleteFlag.class)
	@ApiModelProperty(value = "主键", notes = "主键，唯一标识数据")
	@TableId(type = IdType.AUTO)
	private Integer id;

	/**
	 * 所属系统id
	 */
	@NotNull(message = "系统id不能为空", groups = {InsertFlag.class, Default.class})
	@ApiModelProperty(value = "所属系统id", notes = "所属系统id")
	private Integer systemId;

	/**
	 * 协议编码
	 */
	@NotNull(message = "协议编码不能为空", groups = InsertFlag.class)
	@ApiModelProperty(value = "协议编码", notes = "协议编码")
	private String protocolCode;

	/**
	 * 网端名称
	 */
	@NotNull(message = "网端名称不能为空", groups = InsertFlag.class)
	@ApiModelProperty(value = "网端名称", notes = "网端名称")
	private String name;

	/**
	 * 端类型，字典：segment.type
	 */
	@NotNull(message = "网端类型不能为空", groups = InsertFlag.class)
	@ApiModelProperty(value = "端类型", notes = "端类型，字典：segment.type")
	private Integer type;

	/**
	 * 端标识，0：非首尾端(默认)、1：首端、2：尾端
	 */
	@NotNull(message = "端标识不能为空", groups = InsertFlag.class)
	@ApiModelProperty(value = "端标识", notes = "端标识，0：非首尾端(默认)、1：首端、2：尾端")
	private Integer sign;

	/**
	 * 是否与上一端联系，0：否(默认)、1：是
	 */
	@NotNull(message = "是否与上一端联系不能为空", groups = InsertFlag.class)
	@ApiModelProperty(value = "是否与上一端联系", notes = "是否与上一端联系，0：否(默认)、1：是")
	private Integer isContinue;

	/**
	 * 是否广播，0：否(默认网络数据交互类型)、1：是(只做转发网络数据内容不变)
	 */
	@NotNull(message = "是否广播不能为空", groups = InsertFlag.class)
	@ApiModelProperty(value = "是否广播", notes = "是否广播，0：否(默认网络数据交互类型)、1：是(只做转发网络数据内容不变)")
	private Integer isBroadcast;

	/**
	 * 是否NAT，0：否(默认)、1：是
	 */
	@NotNull(message = "是否NAT不能为空", groups = InsertFlag.class)
	@ApiModelProperty(value = "是否NAT", notes = "是否NAT，0：否(默认)、1：是")
	private Integer isNat;

	/**
	 * 是否为关键网端，0：否(默认)、1：是
	 */
	@NotNull(message = "是否为关键网端不能为空", groups = InsertFlag.class)
	@ApiModelProperty(value = "是否为关键网端", notes = "是否为关键网端，0：否(默认)、1：是")
	private Integer isKey;

	/**
	 * 是否通过前一端发现当前端IP，0：否(默认)、1：是
	 */
	@NotNull(message = "是否通过前一端发现当前端IP不能为空", groups = InsertFlag.class)
	@ApiModelProperty(value = "是否通过前一端发现当前端IP", notes = "是否通过前一端发现当前端IP，0：否(默认)、1：是")
	private Integer isFoundByFront;

	/**
	 * 是否存在漂移，0：否(默认)、1：是
	 */
	@NotNull(message = "是否存在漂移不能为空", groups = InsertFlag.class)
	@ApiModelProperty(value = "是否存在漂移", notes = "是否存在漂移，0：否(默认)、1：是")
	private Integer isDrift;

	/**
	 * 显示顺序
	 */
	@JsonIgnore
	@ApiModelProperty(value = "显示顺序", notes = "显示顺序")
	private Integer sequence;

	/**
	 * 创建人
	 */
	@JsonIgnore
	@ApiModelProperty(value = "创建人", notes = "创建人")
	private String createBy;

	/**
	 * 创建时间
	 */
	@JsonIgnore
	@ApiModelProperty(value = "创建时间", notes = "创建时间")
	private String createTime;

	/**
	 * 更新人
	 */
	@JsonIgnore
	@ApiModelProperty(value = "更新人", notes = "更新人")
	private String updateBy;

	/**
	 * 更新时间
	 */
	@JsonIgnore
	@ApiModelProperty(value = "更新时间", notes = "更新时间")
	private LocalDateTime updateTime;

	/**
	 * 是否逻辑删除，0：否、1：是
	 */
	@JsonIgnore
	@ApiModelProperty(value = "是否逻辑删除", notes = "是否逻辑删除，0：否、1：是")
	private Integer isDel;

	/**
	 * 备注
	 */
	@JsonIgnore
	@ApiModelProperty(value = "备注", notes = "备注")
	private String remarks;

	/**
	 * 端类型名称
	 */
	@TableField(exist = false)
	@ApiModelProperty(value = "端类型名称", notes = "端类型，字典：segment.type")
	private String typeName;
}
